#ifndef WAVELETFILTER_H
#define WAVELETFILTER_H

#include <QVector>

// 定义小波基函数类型
enum WaveletFunction { DB4, SYM8, BIOR44 };

// 定义阈值选择规则
enum ThresholdRule { UNIVERSAL, SURE, HYBRID };

// 小波滤波类
class WaveletFilter {
public:
    // 构造函数
    WaveletFilter(WaveletFunction wavelet, ThresholdRule thresholdRule, int decompositionLevels = 1);

    // 滤波函数
    QVector<double> filter(const QVector<double>& signal);

private:
    WaveletFunction m_wavelet; // 小波基函数
    ThresholdRule m_thresholdRule; // 阈值选择规则
    int m_decompositionLevels; // 小波分解层数

    // 小波基系数
    QVector<double> m_lowPassDecomp; // 分解低通滤波器
    QVector<double> m_highPassDecomp; // 分解高通滤波器
    QVector<double> m_lowPassRecon; // 重构低通滤波器
    QVector<double> m_highPassRecon; // 重构高通滤波器

    // 加载小波基系数
    void loadWaveletCoefficients();

    // 小波分解
    void decompose(const QVector<double>& signal, QVector<QVector<double>>& approxCoeffs, QVector<QVector<double>>& detailCoeffs);

    // 小波重构
    QVector<double> reconstruct(const QVector<QVector<double>>& approxCoeffs, const QVector<QVector<double>>& detailCoeffs);

    // 计算阈值
    double calculateThreshold(const QVector<double>& coefficients);

    // 自适应阈值
    double adaptiveThreshold(const QVector<double>& coefficients);

    // SURE阈值
    double sureThreshold(const QVector<double>& coefficients);

    // 混合阈值
    double hybridThreshold(const QVector<double>& coefficients);
};

#endif // WAVELETFILTER_H
